package br.ufrn.projetoDB.gerenciadorGaragem.persistencia.DAO;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import br.ufrn.projetoDB.gerenciadorGaragem.dominio.Funcionario;
import br.ufrn.projetoDB.gerenciadorGaragem.dominio.Reserva;
import br.ufrn.projetoDB.gerenciadorGaragem.dominio.TipoVeiculo;
import br.ufrn.projetoDB.gerenciadorGaragem.persistencia.util.ConnectionFactory;

public class ReservaDao {

	private Connection c;
	
	public ReservaDao() {
		c = new ConnectionFactory().getConnection();
	}
	
	public boolean inserir (String saida, String chegada, Integer id_func, Integer id_tipo, String desc) throws SQLException, ParseException{
		Calendar cal = Calendar.getInstance();

		SimpleDateFormat sdf2 = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
		
		PreparedStatement p2 = c.prepareStatement("SELECT r.id_reserva "+
													"FROM negocio.reserva r  " + 
													"ORDER r.id_reserva desc LIMIT 1");
		
		Integer id = p2.executeQuery().getInt("id_reserva");
		
		PreparedStatement p = c.prepareStatement("INSERT INTO negocio.reserva(id_reserva, id_funcionario, data_solicitacao, id_tipoveiculo, data_saida, data_chegada, descricao) VALUES (?, ?, ?, ?, ?, ?, ?)");
		p.setInt(0, id++);
		p.setInt(1, id_func);
		p.setDate(2, (Date) cal.getTime());
		p.setInt(3, id_tipo);
		p.setDate(4, (Date) sdf2.parse(saida));
		p.setDate(5, (Date) sdf2.parse(chegada));
		p.setString(6, desc);
		
		return p.execute();
		
	}
	
	public List<Reserva> getAllReservas() throws SQLException{
		PreparedStatement p = c.prepareStatement("SELECT r.* FROM negocio.reserva r ORDER BY r.data_solicitacao ASC");
		
		ResultSet rs = p.executeQuery();
		
		if (rs == null)
			return null;
		
		List<Reserva> result = new ArrayList<Reserva>();
		
		while (rs.next()) {
			Reserva r  = new Reserva(rs.getInt("id_reserva"));
			r.setSolicitante(new Funcionario(rs.getInt("id_funcionario")));
			r.setTipo_solicitacao(new TipoVeiculo(rs.getInt("id_tipoVeiculo")));
			r.setData_solicitacao(rs.getDate("data_solicitacao"));
			r.setData_chegada(rs.getDate("data_chegada"));
			r.setData_saida(rs.getDate("data_saida"));
			r.setDescricao(rs.getString("descricao"));
			
			result.add(r);
		}
		
		return result;
		
	}

	public Reserva getReservasById(Integer id) throws SQLException{
		PreparedStatement p = c.prepareStatement("SELECT r.* FROM negocio.reserva r WHERE r.id_reserva=?");
		p.setInt(1, id);
		ResultSet rs = p.executeQuery();
		
		if (rs == null)
			return null;
		
		Reserva result = null;
		
		while (rs.next()) {
			Reserva r  = new Reserva(rs.getInt("id_reserva"));
			r.setSolicitante(new Funcionario(rs.getInt("id_funcionario")));
			r.setTipo_solicitacao(new TipoVeiculo(rs.getInt("id_tipoVeiculo")));
			r.setData_solicitacao(rs.getDate("data_solicitacao"));
			r.setData_chegada(rs.getDate("data_chegada"));
			r.setData_saida(rs.getDate("data_saida"));
			
			result = r;
			
		}
		
		return result;
		
	}
	
}
